package medium.array;

/**
 * <a href="https://leetcode.cn/problems/maximum-absolute-sum-of-any-subarray/">1749. 任意子数组和的绝对值的最大值</a>
 * 给你一个整数数组 nums 。一个子数组 [numsl, numsl+1, ..., numsr-1, numsr] 的 和的绝对值 为 abs(numsl + numsl+1 + ... + numsr-1 + numsr) 。
 * 请你找出 nums 中 和的绝对值 最大的任意子数组（可能为空），并返回该 最大值 。
 * abs(x) 定义如下：
 *   如果 x 是负整数，那么 abs(x) = -x 。
 *   如果 x 是非负整数，那么 abs(x) = x 。
 * 示例 1：
 *   输入：nums = [1,-3,2,3,-4]
 *   输出：5
 *   解释：子数组 [2,3] 和的绝对值最大，为 abs(2+3) = abs(5) = 5 。
 * 示例 2：
 *   输入：nums = [2,-5,1,-4,3,-2]
 *   输出：8
 *   解释：子数组 [-5,1,-4] 和的绝对值最大，为 abs(-5+1-4) = abs(-8) = 8 。
 * 提示：
 *   1 <= nums.length <= 10^5
 *   -10^4 <= nums[i] <= 10^4
 * @author 刘学松
 * @date 2023-08-08 10:31
 */
public class 任意子数组和的绝对值的最大值 {
    public int maxAbsoluteSum(int[] nums) {
        // max表示累加过程中的最大值，min表示累加过程中的最小值，二者相减就是一个区间子数组的最大值
        int sum = 0, max = 0, min = 0;
        for (int num : nums) {
            sum += num;
            if (max < sum) {
                max = sum;
            } else if (min > sum) {
                min = sum;
            }
        }
        return max - min;
    }
}
